package com.ruoyi.system.media;


/**
 * CPC卡入口信息文件(DF/EF01)的编码信息
 */
public class CpcEf01EdModel {
    public static final int MSG_LEN = 39;

    /**
     * 入口车型(01-01,1,n)
     */
    public byte[] nEntyVch = new byte[1];

    /**
     * 车牌号码(02-13,12,s)
     * 牌照 (汉字+字母+数字，不含颜色)信息，采用字符型存储, 汉字采用 GB2312 码
     * ，如： “京”编码为“BEA9”；牌照信息不足 12 字节，后补 0x00
     */
    public byte[] cPltData = new byte[12];

    /**
     * 车牌颜色(14-14,1,n)
     * 0x00 –蓝色； 0x01–黄色； 0x02 –黑色； 0x03 –白色； 0x04-渐变绿色； 0x05-黄绿双拼色； 0x06-蓝白渐变；0x07～0xFF 保留
     */
    public byte[] nPltCols = new byte[1];

    /**
     * 入口收费路网号(15-16,2,h)
     */
    public byte[] cEntyNet = new byte[2];

    /**
     * 入口站号(17-18,2,h)
     */
    public byte[] cEntyStn = new byte[2];

    /**
     * 入口道号(19-19,1,n)
     */
    public byte[] nEntyLan = new byte[1];

    /**
     * 入口时间(20-23,4,n)
     */
    public byte[] cEntyTim = new byte[4];

    /**
     * 5.8GHz工作状态(24-24,1,n)
     * 0x01打开; 0x02关闭
     */
    public byte[] nWorkSts = new byte[1];

    /**
     * 流通状态(25-25,1,n)
     * 0x01：封闭式 MTC入口； 0x02：封闭式 MTC出口；0x10：封闭式自助入口
     */
    public byte[] nCardStt = new byte[1];

    /**
     * 入口车种(26-26,1,n)
     * 0-普通车； 6-公务车； 8-军警车； 10-紧急车； 12-免费；14-车队； 0～20 内其他：自定义；
     * 21-绿通车； 22-联合收割机 ; 23-抢险救灾; 24－J1专用集装箱车；25-大件运输; 26－应急救援车；27－货车列车或半挂汽车列车;28-J2集装箱车
     */
    public byte[] nVchClss = new byte[1];

    /**
     * 入口工号(27-29,3,n)
     */
    public byte[] cEntyOpt = new byte[3];

    /**
     * 入口班次(30-30,1,n)
     */
    public byte[] nEntySft = new byte[1];

    /**
     * 货车轴数(31-31,1,n)
     */
    public byte[] nAxisSum = new byte[1];

    /**
     * 货车总重(32-35,4,n)
     * 单位:kg,从入口称重检测系统获取，若为客车或无总重信息时全部填写 0xFF
     */
    public byte[] cTotWeit = new byte[4];

    /**
     * 核定载重(36-38,3,n)
     * 单位:kg, 无核定载重信息时全部填写 0xFF
     */
    public byte[] cStdWeit = new byte[3];

    /**
     * 特殊货车(39-39,1,n)
     * 0x00－本次通行用于大件运输
     * 0x01－非优惠车辆
     * 0x02－绿通
     * 0x03－联合收割机
     * 0x04－集装箱车辆
     * 0xFF－默认
     */
    public byte[] nOthrBus = new byte[1];

    /**
     * 信息编码
     *
     * @param dd
     * @return
     */
    public static CpcEf01EdModel encoded(CpcEf01Model dd) {
        CpcEf01EdModel ed = new CpcEf01EdModel();
        ed.nEntyVch = ZTools.int2bin(1, dd.nEntyVch);
        ed.cPltData = ZTools.str2bin(12, dd.cPltData);
        ed.nPltCols = ZTools.int2bin(1, dd.nPltCols);
        ed.cEntyNet = ZTools.hex2bin(2, dd.cEntyNet);
        ed.cEntyStn = ZTools.hex2bin(2, dd.cEntyStn);
        ed.nEntyLan = ZTools.int2bin(1, dd.nEntyLan);
        ed.cEntyTim = ZTools.int2bin(4, dd.cEntyTim);
        ed.nWorkSts = ZTools.int2bin(1, dd.nWorkSts);
        ed.nCardStt = ZTools.int2bin(1, dd.nCardStt);
        ed.nVchClss = ZTools.int2bin(1, dd.nVchClss);
        ed.cEntyOpt = ZTools.int2bin(3, dd.cEntyOpt);
        ed.nEntySft = ZTools.int2bin(1, dd.nEntySft);
        ed.nAxisSum = ZTools.int2bin(1, dd.nAxisSum);
        ed.cTotWeit = ZTools.int2bin(4, dd.cTotWeit);
        ed.cStdWeit = ZTools.int2bin(3, dd.cStdWeit);
        ed.nOthrBus = ZTools.int2bin(1, dd.nOthrBus);

        return ed;
    }

    public byte[] toBytes() {
        byte[] ret = ZTools.sbMerger(nEntyVch, cPltData, nPltCols, cEntyNet, cEntyStn, nEntyLan, cEntyTim, nWorkSts, nCardStt, nVchClss, cEntyOpt, nEntySft, nAxisSum, cTotWeit, cStdWeit, nOthrBus);
        return ret;
    }

    public String toHexStr() {
        return ZTools.bin2hex(toBytes());
    }

}
